﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using RedesII_DTL;
using System.Data.Common;

namespace RedesII_DAL
{
    public class EquipmentDao
    {
        public EquipmentDto GetByIp(string ip)
        {
            string query = "SELECT ID_EQUIPAMENTO, ID_DISPOSITIVO, IP,PROCESSADOR, PLACAREDE FROM WMI_EQUIPAMENTOS WHERE IP = '" + ip.ToString() + "'";
            var equipment = BuscaRegistro(query);
            if (equipment._Ip != null)
            {
                return equipment;
            }
            else
                return null;
        }

        public bool InsertEquipment(EquipmentDto equipment)
        {
            //TODO: Alterar essa parte do código
            string query =
                String.Format("INSERT INTO WMI_EQUIPAMENTOS (IP,PROCESSADOR,PLACAREDE) VALUES ('{0}','{1}','{2}')",
                equipment._Ip, equipment._Processador, equipment._PlacarRede);
            //string query =
            //    String.Format("INSERT INTO WMI_EQUIPAMENTOS (ID_DISPOSITIVO,IP,PROCESSADOR,PLACAREDE) VALUES (,{0},'{1}','{2}','{3}')",
            //    equipment._IdDispositivo, equipment._Ip, equipment._Processador, equipment._PlacarRede);
            return ExecutaComando(query);
        }


        protected EquipmentDto BuscaRegistro(string query)
        {
            // criando a conexão com o banco
            DaoFactory factory = new DaoFactory();
            DbConnection connection = factory.CriaConexao();
            // criando o comando que vai ser executado
            DbCommand cmd = factory.CriaComando();
            cmd.Connection = connection;
            cmd.CommandText = query;
            // abrindo a conexão
            connection.Open();
            // executando o comando e obtendo um reader (leitor de dados)
            DbDataReader reader = cmd.ExecuteReader();
            // criando um usuario
            EquipmentDto equipment = new EquipmentDto();
            // para cada registro lido pelo reader
            while (reader.Read())
            {
                equipment._IdEquipamento = Convert.ToInt32(reader["ID_EQUIPAMENTO"].ToString());
                equipment._IdDispositivo = (!reader["ID_DISPOSITIVO"].ToString().Equals(string.Empty) ? Convert.ToInt32(reader["ID_DISPOSITIVO"].ToString()) : 0);
                equipment._Ip = (string)reader["IP"].ToString();
                equipment._Processador = (string)reader["PROCESSADOR"].ToString();
                equipment._PlacarRede = (string)reader["PLACAREDE"].ToString();
            }
            // fechando a conexão
            connection.Close();
            return equipment;
        }

        protected virtual bool ExecutaComando(string query)
        {
            DaoFactory factory = new DaoFactory();
            // criando a conexão com o banco
            DbConnection connection = factory.CriaConexao();
            // criando o comando que vai ser executado
            DbCommand cmd = factory.CriaComando();
            cmd.Connection = connection;
            cmd.CommandText = query;
            // abrindo a conexão
            connection.Open();
            // executando o comando e obtendo um reader (leitor de dados)
            int res = cmd.ExecuteNonQuery();
            // fechando a conexão
            connection.Close();
            return res > 0;
        }
    }
}
